# Replication code for Taylor C. Boas, Dino P. Christenson, and David M. Glick, "Recruiting Large Online Samples in the United States and India: Facebook, Mechanical Turk and Qualtrics," Political Science Research and Methods.

# Analysis conducted in R 3.4.3 on MacOS 10.13.2

# NOTE: This file cleans the raw U.S. survey data. Questionnaires corresponding to the raw data and a codebook for the cleaned data can be found in the main folder. Files should be run in the following order; please see readme.txt for details.
# 	1. clean_us_survey.R
# 	2. clean_india_survey.R
# 	3. merge_external_data_us.R
# 	4. merge_external_data_india.R
# 	5. analyze_demographics.R
# 	6. analyze_spaces.R
# 	7. analyze_politics.R
# 	8. analyze_cooperativeness.R
# 	9. analyze_experiments.R

# Set working directory as appropriate
# setwd('~/Dropbox/sample recruitment shared/replication/')

# Clean desktop and load packages. Please make sure all necessary packages are installed.
rm(list=ls(all=T))
library(car)

# Load raw survey data and make copy for cleaning
load('us_raw.RData')
us<-us_raw

# Clean data 
us$StartDate<-as.POSIXct(us$StartDate,tz='America/New_York')
us$EndDate<-as.POSIXct(us$EndDate,tz='America/New_York')
us$StartDate[which(us$EndDate < us$StartDate)]<- us$StartDate[which(us$EndDate < us$StartDate)] - 3600 # Straddled time change, R inaccurately assumed EST because after 01:30
us$EndDate[which(us$EndDate < us$StartDate)]<- us$EndDate[which(us$EndDate < us$StartDate)] + 3600 # Straddled time change, R inaccurately assumed EDT because before 01:30
us$duration<-(as.numeric(us$EndDate)-as.numeric(us$StartDate))/60 # Duration in minutes
us$duration[us$Finished==0]<-NA

names(us)[which(names(us)=='B1_3_TEXT')]<-'OS'

us$targ<-as.numeric(ifelse(us$targ=='','0',us$targ))

us$Q1<-as.numeric(us$Q1)
us$Q2<-as.numeric(us$Q2)
us$Q3<-as.numeric(us$Q3)+16
us$Q4<-as.numeric(us$Q4)
us$Q5<-as.numeric(us$Q5)
us$Q6<-as.numeric(us$Q6)
us$Q7<-as.numeric(us$Q7)
us$Q8<-as.numeric(us$Q8)

us$Q9_2<-recode(us$Q9_2,'2=1;1=2') # Dealing with party order randomization
us$Q9<-apply(us[,c('Q9_1','Q9_2')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q9[us$Q9==0]<-NA
us$Q9_1<-us$Q9_2<-NULL

us$Q10<-apply(us[,c('Q10a_1','Q10a_2','Q10b_1','Q10b_2')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q10[us$Q10==0]<-NA
us$Q10a_1<-us$Q10a_2<-us$Q10b_1<-us$Q10b_2<-NULL

us$Q10_ind<-apply(us[,c('Q10c_1','Q10c_2')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q10_ind[us$Q10_ind==0]<-NA
us$Q10c_1<-us$Q10c_2<-NULL

us$Q11<-as.numeric(us$Q11)
us$Q11_firstclick<-as.numeric(us$T11_1)
us$Q11_firstclick[us$Q11_firstclick < 0]<-NA
us$Q11_lastclick<-as.numeric(us$T11_2)
us$Q11_lastclick[us$Q11_lastclick < 0]<-NA
us$Q11_submit<-as.numeric(us$T11_3)
us$Q11_submit[us$Q11_submit < 0]<-NA
us$Q11_clickcount<-as.numeric(us$T11_4)
us$Q11_clickcount[us$Q11_clickcount < 0]<-NA
us$T11_1<-us$T11_2<-us$T11_3<-us$T11_4<-NULL

us$Q12a<-as.numeric(us$Q12_1)
us$Q12b<-as.numeric(us$Q12_2)
us$Q12c<-as.numeric(us$Q12_3)
us$Q12d<-as.numeric(us$Q12_4)
us$Q12_1<-us$Q12_2<-us$Q12_3<-us$Q12_4<-NULL

us$Q13_correct<-as.numeric(as.numeric(us$Q13_1_TEXT) %in% 2)
us$Q14_correct<-as.numeric(as.numeric(us$Q14_1_TEXT) %in% 6)
names(us)[which(names(us) %in% c('Q13_1_TEXT','Q14_1_TEXT'))]<-c('Q13','Q14')

us$Q15_correct<-0
us$Q15_correct[grep('pm|prime|prim|p\\.m|premier|prmie|parilment leader|prine|p m|head of british parliament|head of british parliment|head of parlement|head of parliment|leader of british parlament|member of parliament|^minister|pime|prike|prome|reime minister', tolower(us$Q15))]<-1
us$Q15_correct[grep('canad|australia|ca$|europe$|russia|europe|former|out of office|was|used to be |no longer|^ex|retired', tolower(us$Q15))]<-0

us$Q16_correct<-0
us$Q16_correct[grep('justice|supreme court|cheif justic|chief j|chief usscj|chief, upreme court|chuef justis|cj of scotus|judge|scj|scotus|scous|judje|justus|supream court|suptreme court|surprem court|surprime court', tolower(us$Q16))]<-1

us$Q17<-as.numeric(us$Q17)
us$Q17_firstclick<-as.numeric(us$T17_1)
us$Q17_firstclick[us$Q17_firstclick < 0]<-NA
us$Q17_lastclick<-as.numeric(us$T17_2)
us$Q17_lastclick[us$Q17_lastclick < 0]<-NA
us$Q17_submit<-as.numeric(us$T17_3)
us$Q17_submit[us$Q17_submit < 0]<-NA
us$Q17_clickcount<-as.numeric(us$T17_4)
us$Q17_clickcount[us$Q17_clickcount < 0]<-NA
us$T17_1<-us$T17_2<-us$T17_3<-us$T17_4<-NULL

us$Q18<-as.numeric(us$Q18)

us$Q19_draft<-NA
us$Q19_draft[us$Q19a == ''& us$Q19b != '']<-1
us$Q19_draft[us$Q19b == ''& us$Q19a != '']<-0
us$Q19<-apply(us[,c('Q19a','Q19b')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q19[us$Q19==0]<-NA
us$Q19a<-us$Q19b<-NULL

us$T19a_1[as.numeric(us$T19a_1) < 0]<-us$T19a_2[as.numeric(us$T19a_2) < 0]<-us$T19a_3[as.numeric(us$T19a_3) < 0]<-us$T19a_4[as.numeric(us$T19a_4) < 0]<-us$T19b_1[as.numeric(us$T19b_1) < 0]<-us$T19b_2[as.numeric(us$T19b_2) < 0]<-us$T19b_3[as.numeric(us$T19b_3) < 0]<-us$T19b_4[as.numeric(us$T19b_4) < 0]<-NA
us$Q19_firstclick<-apply(us[,c('T19a_1','T19b_1')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q19_firstclick[is.na(us$T19a_1)&is.na(us$T19b_1)]<-NA
us$Q19_lastclick<-apply(us[,c('T19a_2','T19b_2')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q19_lastclick[is.na(us$T19a_2)&is.na(us$T19b_2)]<-NA
us$Q19_submit<-apply(us[,c('T19a_3','T19b_3')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q19_submit[is.na(us$T19a_3)&is.na(us$T19b_3)]<-NA
us$Q19_clickcount<-apply(us[,c('T19a_4','T19b_4')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q19_clickcount[is.na(us$T19a_4)&is.na(us$T19b_4)]<-NA
us$T19a_1<-us$T19b_1<-us$T19a_2<-us$T19b_2<-us$T19a_3<-us$T19b_3<-us$T19a_4<-us$T19b_4<-NULL

us$Q20_deduct<-NA
us$Q20_deduct[us$Q20a == ''& us$Q20b != '']<-1
us$Q20_deduct[us$Q20b == ''& us$Q20a != '']<-0
us$Q20<-apply(us[,c('Q20a','Q20b')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q20[us$Q20==0]<-NA
us$Q20a<-us$Q20b<-NULL

us$T20a_1[as.numeric(us$T20a_1) < 0]<-us$T20a_2[as.numeric(us$T20a_2) < 0]<-us$T20a_3[as.numeric(us$T20a_3) < 0]<-us$T20a_4[as.numeric(us$T20a_4) < 0]<-us$T20b_1[as.numeric(us$T20b_1) < 0]<-us$T20b_2[as.numeric(us$T20b_2) < 0]<-us$T20b_3[as.numeric(us$T20b_3) < 0]<-us$T20b_4[as.numeric(us$T20b_4) < 0]<-NA
us$Q20_firstclick<-apply(us[,c('T20a_1','T20b_1')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q20_firstclick[is.na(us$T20a_1)&is.na(us$T20b_1)]<-NA
us$Q20_lastclick<-apply(us[,c('T20a_2','T20b_2')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q20_lastclick[is.na(us$T20a_2)&is.na(us$T20b_2)]<-NA
us$Q20_submit<-apply(us[,c('T20a_3','T20b_3')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q20_submit[is.na(us$T20a_3)&is.na(us$T20b_3)]<-NA
us$Q20_clickcount<-apply(us[,c('T20a_4','T20b_4')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q20_clickcount[is.na(us$T20a_4)&is.na(us$T20b_4)]<-NA
us$T20a_1<-us$T20b_1<-us$T20a_2<-us$T20b_2<-us$T20a_3<-us$T20b_3<-us$T20a_4<-us$T20b_4<-NULL

us$Q21a_welfare<-NA
us$Q21a_welfare[us$Q21b_1 == ''& us$Q21a_1 != '']<-1
us$Q21a_welfare[us$Q21a_1 == ''& us$Q21b_1 != '']<-0
us$Q21a<-apply(us[,c('Q21a_1','Q21b_1')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q21a[us$Q21a==0]<-NA
us$Q21a_1<-us$Q21b_1<-NULL
us$Q21b<-apply(us[,c('Q21a_2','Q21b_2')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q21b[us$Q21b==0]<-NA
us$Q21a_2<-us$Q21b_2<-NULL
us$Q21c<-apply(us[,c('Q21a_3','Q21b_3')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q21c[us$Q21c==0]<-NA
us$Q21a_3<-us$Q21b_3<-NULL

us$T21a_1[as.numeric(us$T21a_1) < 0]<-us$T21a_2[as.numeric(us$T21a_2) < 0]<-us$T21a_3[as.numeric(us$T21a_3) < 0]<-us$T21a_4[as.numeric(us$T21a_4) < 0]<-us$T21b_1[as.numeric(us$T21b_1) < 0]<-us$T21b_2[as.numeric(us$T21b_2) < 0]<-us$T21b_3[as.numeric(us$T21b_3) < 0]<-us$T21b_4[as.numeric(us$T21b_4) < 0]<-NA
us$Q21_firstclick<-apply(us[,c('T21a_1','T21b_1')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q21_firstclick[is.na(us$T21a_1)&is.na(us$T21b_1)]<-NA
us$Q21_lastclick<-apply(us[,c('T21a_2','T21b_2')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q21_lastclick[is.na(us$T21a_2)&is.na(us$T21b_2)]<-NA
us$Q21_submit<-apply(us[,c('T21a_3','T21b_3')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q21_submit[is.na(us$T21a_3)&is.na(us$T21b_3)]<-NA
us$Q21_clickcount<-apply(us[,c('T21a_4','T21b_4')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q21_clickcount[is.na(us$T21a_4)&is.na(us$T21b_4)]<-NA
us$T21a_1<-us$T21b_1<-us$T21a_2<-us$T21b_2<-us$T21a_3<-us$T21b_3<-us$T21a_4<-us$T21b_4<-NULL

us$Q22<-as.numeric(us$Q22)
us$Q23<-as.numeric(us$Q23)
us$Q24<-as.numeric(us$Q24)
us[,grep('Q25',names(us))]<-apply(us[,grep('Q25',names(us))],2,as.numeric)
us$Q26<-as.numeric(us$Q26)
us$Q27<-as.numeric(us$Q27)
us$Q28[nchar(us$Q28)<5]<-NA
us$Q28<-substr(us$Q28,1,5)
us$Q29<-as.numeric(us$Q29)
us$Q30<-as.numeric(us$Q30)

us$Q31_dk<-NA
us$Q31_dk[us$Q31a == ''& us$Q31b != '']<-1
us$Q31_dk[us$Q31b == ''& us$Q31a != '']<-0
us$Q31<-apply(us[,c('Q31a','Q31b')],1,function(x) sum(as.numeric(x),na.rm=T))
us$Q31[us$Q31==0]<-NA
us$Q31a<-us$Q31b<-NULL

us$Q32<-as.numeric(us$Q32)
us$Q33<-as.numeric(us$Q33)

us$Q35<-as.numeric(us$Q35)
us$Q35[us$Q35==-99]<-2 # Coding those who skipped the question as a "no"

# Reorder variables
q_order<-sort(names(us))
q_order<-c(q_order[grep('Q[0-9]{1}$',q_order)], q_order[grep('Q[0-9]{2}',q_order)])
us<-us[,c(names(us)[!names(us) %in% q_order],q_order)]

# Last question answered and percentage progress. Ignoring questions Q34 (optional open-ended comment box) and Q35 (Facebook raffle entry).
answered<-NA
answered[which(us$Finished==0)]<-apply(us[us$Finished==0,grep('^Q[0-9]{1,2}[a-z]{0,1}_{0,1}[0-9]{0,2}$',names(us))],1,function(x) which(!is.na(x)&x!=''))
us$last_answered<-names(us)[grep('^Q[0-9]{1,2}[a-z]{0,1}_{0,1}[0-9]{0,2}$',names(us))][sapply(answered,function(x) ifelse(length(x)==0,NA,max(x)))]
us$last_answered[which(us$Finished==1)]<-'Q33'
us$pct_progress<-round(100*as.numeric(substr(us$last_answered,2,3))/33)

save(us,file='us.RData')
